# 1.字符
# 转义字符\可以转义很多字符，比如\n表示换行，\t表示制表符，字符\本身也要转义，所以\\表示的字符就是\
# r''表示''内部的字符串默认不转义
print('\'')  # 转义字符\
print(r'\\\t\\')  # r''

# '''表示多行
print('''line1
line2
line3''')

print("==============2.字符串操作===============")
# 字符串 单双引号均可用
t_007 = 'T007'
t_007 = "T007"
t_007 = "'T007"
t_007 = 'T007"'

# 包含字符
len(t_007)
# 如果换成bytes，len()函数就计算字节数
# 1个中文字符经过UTF-8编码后通常会占用3个字节，而1个英文字符只占用1个字节。
len(b'tt07')
len('中文'.encode('utf-8'))

# 字符串格式化 %
# %s表示用字符串替换，%d表示用整数替换，有几个%?占位符，如果只有一个%?，括号可以省略
# 常见的 %d 整数   %f	浮点数    %s	字符串   %x 十六进制
print('Hello, %s' % 'world')  # 一个
print('Hi, %s, you have $%d.' % ('Michael', 1000000))  # 多个
print(1, "组合多个变量打印", "bb")
a = 1111
b = str(a) + "bb"
print(b)

# 编码 .decode('编码类型')
print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))

print("=============3.基本数据类型================")
# 布尔值 True、False两种值
# 可以用and、or和not运算。（对应java中的&& || ！）
# 空值 None（对应java null）
# 整数和浮点和java差不多

# 变量 无需定义类型
t_007 = 'T007'

print("==============4.数据结构===============")
# list有序的集合
classmates = ['Michael', 'Bob', 'Tracy']
classmates[0] = "xxx"
classmates.append('Adam')  # 追加到最后
classmates.insert(1, 'Jack')  # 插入指定位置
classmates.pop(1)  # 删除指定位置
len(classmates)  # 长度
print(len(classmates))

# tuple 不可变有序集合
# 元组 tuple和list非常类似，但是tuple一旦初始化就不能修改
# 只有1个元素的tuple定义时必须加一个逗号,
classmatestuple = ('Michael', 'Bob', 'Tracy')

# dict字典（map）
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
'Thomas' in d  # 判断字典中key是否存在
d['Michael']  # 取值
d.get('Bob')  # 取值 没有返回None
d['Michael'] = 4444  # 设置值
print(d.get('Thomas', -1))  # 取值 没有返回指定值 可以是任意类型的
print(d.get('Thomas'))  # 取值 key不存在，可以返回None
# 注意：1.d['Michael']这种方式取值  key不存在，dict就会报错 2.key必须是不可变对象


# set
# 类似java的set 单列表 无重复
s = set([1, 2, 3])
s.add(4)  # 添加 重复的会被覆盖
s.remove(4)

for a in s:
    print("set==== %s" % a)

print("============5.流程控制语句=================")
# if语句
age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

# 10.for语句
for x in [1, 2, 3]:
    print(x)

for index, x in enumerate([1, 2, 3]):
    print("for循环 角标：%s----%s" % (index, x))
    # print(index,x,"==============")

n = 3
while n > 0:
    n = n - 1
    print(n)

# break语句会结束当前循环语句，不再循环，执行循环外的代码
# continue语句会结束当次循环，执行下次循环



print("============6.数据元素包含=================")
# 包含语句 if..in
# list tuple集合中是否包含
if "xx" in ["xx", "aa"]:
    print("------")
# 是否包含map key
if "gg" in {'Michael': 95, 'Bob': 75, 'Tracy': "gg"}:
    print("map--in")
# set集合中是否包含
if "bb" in (["xx", "bb"]):
    print("set--in")



print("============7.数字 字符串转换=================")
# python中的字符数字之间的转换函数
# int(x [,base ])         将x转换为一个整数
# long(x [,base ])        将x转换为一个长整数
# float(x )               将x转换到一个浮点数
# complex(real [,imag ])  创建一个复数
# str(x )                 将对象 x 转换为字符串
# repr(x )                将对象 x 转换为表达式字符串
# eval(str )              用来计算在字符串中的有效Python表达式,并返回一个对象
# tuple(s )               将序列 s 转换为一个元组
# list(s )                将序列 s 转换为一个列表
# chr(x )                 将一个整数转换为一个字符
# unichr(x )              将一个整数转换为Unicode字符
# ord(x )                 将一个字符转换为它的整数值
# hex(x )                 将一个整数转换为一个十六进制字符串
# oct(x )                 将一个整数转换为一个八进制字符串

# chr(65)='A'
# ord('A')=65
# int('2')=2;
# str(2)='2'

# >>> int('123')
# 123
# >>> int(12.34)
# 12
# >>> float('12.34')
# 12.34
# >>> str(1.23)
# '1.23'
# >>> str(100)
# '100'
# >>> bool(1)
# True
# >>> bool('')
# False
